/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.deliccio.entitys;

import java.io.Serializable;
import java.lang.reflect.Method;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.deliccio.connect.Entidad;


@Entity
@Table(name = "parametros")
public class Parametros implements Entidad, Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idParametro", nullable = false)
    private Integer id;
    @Column(name = "nombre", length = 20)
    private String nombre;
    @Column(name = "descripcion", length = 20)
    private String descripcion;
    @Column(name = "tabla")
    private Integer tabla;
    @JoinTable(name = "menuporperfil", joinColumns = {
        @JoinColumn(name = "idperfil", referencedColumnName = "idParametro", nullable = false)}, inverseJoinColumns = {
        @JoinColumn(name = "idmenu", referencedColumnName = "idmenu", nullable = false)})
    @ManyToMany(fetch = FetchType.EAGER)
    private List<Menu> menuList;
   /* @OneToMany(cascade = CascadeType.ALL, mappedBy = "parametros", fetch = FetchType.LAZY)
    private List<Usuario> usuarioList;*/
    @ManyToOne
    @JoinColumn(name = "parametropadre")
    public Parametros parametroPadre;

	@OneToMany(mappedBy="id")
    public List<Parametros> subParametros;
    
	public transient String value;
    
    public Parametros() {
    }

   

    public Parametros(Integer id,String nombre){
		super();
		this.id=id;
		this.nombre=nombre;
	}



	public Integer getId(){
		return id;
	}



	public void setId(Integer id){
		this.id=id;
	}



	public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public Integer getTabla() {
        return tabla;
    }

    public void setTabla(Integer tabla) {
        this.tabla = tabla;
    }

    public List<Menu> getMenuList() {
        return menuList;
    }

    public void setMenuList(List<Menu> menuList) {
        this.menuList = menuList;
    }
/*
    public List<Usuario> getUsuarioList() {
        return usuarioList;
    }

    public void setUsuarioList(List<Usuario> usuarioList) {
        this.usuarioList = usuarioList;
    }*/


    public Parametros getParametroPadre(){
  		return parametroPadre;
  	}

  	public void setParametroPadre(Parametros parametroPadre){
  		this.parametroPadre=parametroPadre;
  	}

  	public List<Parametros> getSubParametros(){
  		return subParametros;
  	}


  	public void setSubParametros(List<Parametros> subParametros){
  		this.subParametros=subParametros;
  	}



	public String getValue(){
		return value;
	}



	public void setValue(String value){
		this.value=value;
	}

	/*	@SuppressWarnings({"unused","rawtypes"})

		@Override
		public String toString() {
			String toString = "[";
			try {
			String campo= "",iscampo = "";
			
				Class clase = this.getClass();
				Method[] metodos = clase.getDeclaredMethods();
				for (Method met:metodos) {					
					if (met.getName().indexOf("get") >= 0) {
						toString += met.getName()+"="+met.invoke(this, null)+" - ";
					}
				}								
				toString+="]";
			} catch (Exception e) {			
				System.out.println(e);
			}
			return toString;
		}*/
}
